const express = require('express');
const router = express.Router();
const { AIRole } = require('../models');
const { authenticateToken, isAdmin } = require('../middleware/auth');
const fs = require('fs');
const path = require('path');

// 获取所有AI角色
router.get('/', async (req, res) => {
  try {
    const roles = await AIRole.findAll();
    res.json(roles);
  } catch (error) {
    console.error('获取AI角色失败:', error);
    res.status(500).json({ error: '获取AI角色失败' });
  }
});

// 获取单个AI角色
router.get('/:id', async (req, res) => {
  try {
    const role = await AIRole.findByPk(req.params.id);
    if (!role) return res.status(404).json({ error: 'AI角色不存在' });
    res.json(role);
  } catch (error) {
    console.error('获取AI角色失败:', error);
    res.status(500).json({ error: '获取AI角色失败' });
  }
});

// 管理员创建AI角色（需要认证和管理员权限）
router.post('/', authenticateToken, isAdmin, async (req, res) => {
  try {
    const { name, description, avatar, type, api_provider, api_config, system_prompt } = req.body;
    
    const newRole = await AIRole.create({
      name,
      description,
      avatar,
      type,
      api_provider,
      api_config,
      system_prompt
    });
    
    res.status(201).json(newRole);
  } catch (error) {
    console.error('创建AI角色失败:', error);
    res.status(500).json({ error: '创建AI角色失败' });
  }
});

// 管理员更新AI角色
router.put('/:id', authenticateToken, isAdmin, async (req, res) => {
  try {
    const role = await AIRole.findByPk(req.params.id);
    if (!role) return res.status(404).json({ error: 'AI角色不存在' });
    
    // 如果更新了头像，删除旧的头像文件
    if (req.body.avatar && role.avatar && req.body.avatar !== role.avatar) {
      // 检查旧头像是否是上传的文件（以/uploads/开头）
      if (role.avatar.startsWith('/uploads/')) {
        const oldFilePath = path.join(__dirname, '..', 'public', role.avatar);
        try {
          if (fs.existsSync(oldFilePath)) {
            fs.unlinkSync(oldFilePath);
            console.log(`已删除旧头像文件: ${oldFilePath}`);
          }
        } catch (fileError) {
          console.error('删除旧头像文件失败:', fileError);
          // 不阻断更新操作，只记录错误
        }
      }
    }
    
    await role.update(req.body);
    res.json(role);
  } catch (error) {
    console.error('更新AI角色失败:', error);
    res.status(500).json({ error: '更新AI角色失败' });
  }
});

// 管理员删除AI角色
router.delete('/:id', authenticateToken, isAdmin, async (req, res) => {
  try {
    const roleId = req.params.id;
    console.log(`正在尝试删除ID为 ${roleId} 的AI角色`);
    
    const role = await AIRole.findByPk(roleId);
    if (!role) {
      console.log(`未找到ID为 ${roleId} 的AI角色`);
      return res.status(404).json({ error: 'AI角色不存在' });
    }
    
    // 删除关联的头像文件
    if (role.avatar && role.avatar.startsWith('/uploads/')) {
      const avatarFilePath = path.join(__dirname, '..', 'public', role.avatar);
      try {
        if (fs.existsSync(avatarFilePath)) {
          fs.unlinkSync(avatarFilePath);
          console.log(`已删除头像文件: ${avatarFilePath}`);
        }
      } catch (fileError) {
        console.error('删除头像文件失败:', fileError);
        // 不阻断删除操作，只记录错误
      }
    }
    
    // 执行删除操作
    await role.destroy();
    console.log(`成功删除ID为 ${roleId} 的AI角色`);
    
    // 返回成功响应
    res.json({ 
      success: true, 
      message: '删除成功',
      id: roleId
    });
  } catch (error) {
    console.error('删除AI角色失败:', error);
    res.status(500).json({ 
      error: '删除AI角色失败', 
      message: error.message 
    });
  }
});

module.exports = router;